import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * clase Banshee 
 * En esta clase se encuentran los metodos fly y shoot de este tipo de enemigo
 * 
 * @author (Octavio y Cesar) 
 * @version (2014.11.28)
 */
public class Banshee extends Enemy

{
    private  Guns gun;
    private Timer time; 
    private boolean cambiaDir;
    private double angle;
    private int xPos;
    private int yPos;
    private int xRadius;
    
    /**
     * constructor de variables de la clase Banshee
     */
    public Banshee()
    {
        super(200,0);
        
        time=new Timer();
        cambiaDir=false;
        angle=Math.PI;   
        xPos=250;
        yPos=200;
        xRadius=100;

        GreenfootImage image=getImage();
        image.scale(40,40);
        setImage(image);
    }
    /**
     * sobrecarga de constructor 
     * @param x, y, radio, angulo
     */     
    public Banshee(int x, int y, int radius,double ang)
    {
        super(200,0);
        
        time=new Timer();
        cambiaDir=false;
        angle=ang;   
        xPos=x;
        yPos=y;
        xRadius=radius;

        GreenfootImage image=getImage();
        image.scale(40,40);
        setImage(image);
    }
    
    /**
     * Act - do whatever the Enemy3 wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
        this.shoot();
        this.fly();  
        super.checaVida();
        this.sumaPuntos();
    }   

    /**
     * este metodo hace que la nave se mueva en forma de infinito usando ecuaciones parametricas
     */
    public void fly() 
    {
        
        double x = xRadius*Math.sin(angle)/(1+Math.cos(angle)*Math.cos(angle))+xPos;
        double y = xRadius*Math.sin(angle)*Math.cos(angle)/(1+Math.cos(angle)*Math.cos(angle))+yPos;
        double inc = Math.PI/180;
        double aux=Math.sin(angle);
        
        angle+=.1;
        setLocation((int)x,(int)y);
        
    } 
    
    /**
     * Este metodo agrega la bomba enemiga al mundo y reproduce el sonido
     */
    public void shoot()
    {
        GreenfootSound bulletSound=new GreenfootSound("boom.wav");
        time.increases();
        if(time.getTime()==20)
        {
            Guns bullet;
            bullet= new EBomb();
            GreenfootImage myImage=this.getImage();
            getWorld().addObject(bullet,this.getX(),this.getY()+myImage.getHeight());
            bulletSound.setVolume(30);
            bulletSound.play();
            time.reset();
        }

    }
    
    /**
     * este metodo checa cuando la salud de esta nave enemiga llega a cero y le añade cierto
     * numero de puntos al heroe
     */
    public void sumaPuntos()
    {
        if(getHealth()<0)
         {
            ((Space)getWorld()).getHero().setPoints(400);
            (new GreenfootSound("exploPop.wav")).play();
            getWorld().removeObject(this);  
         }
    }
    
    /**
     * iguala la posision inicial con la actual en x y en y
     */
     public void changeCenter(int xPos, int yPos)
    {
        this.xPos=xPos;
        this.yPos=yPos;
    }

}    

